package com.zjsru.plan2024.oneday;

/**
 * 3101. 交替子数组计数
 * @Author: cookLee
 * @Date: 2024-07-07
 */
public class CountAlternatingSubarrays {

    /**
     * 主
     * \
     * 输入： nums = [0,1,1,1]
     * 输出： 5
     * 解释：
     * 以下子数组是交替子数组：[0] 、[1] 、[1] 、[1] 以及 [0,1] 。
     * \
     * 输入： nums = [1,0,1,0]
     * 输出： 10
     * 解释：
     * 数组的每个子数组都是交替子数组。可以统计在内的子数组共有 10 个。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        CountAlternatingSubarrays countAlternatingSubarrays = new CountAlternatingSubarrays();
        int[] nums = new int[]{0,1,1,1};
        System.out.println(countAlternatingSubarrays.countAlternatingSubarrays(nums));
    }

    /**
     * 计数交替子阵列
     *
     * @param nums nums
     * @return long
     */
    public long countAlternatingSubarrays(int[] nums) {
        long ans = 0;
        //定义一个数字 预先存上位数字
        int pre = -1;
        //表示数组符合条件和
        long cur = 0;
        for (int num : nums) {
            //如果与上位数字相等就说明只满足一次条件，否则累计满足条件数
            cur = (pre == num) ? 1 : cur + 1;
            //更新上位数字
            pre = num;
            ans += cur;
        }
        return ans;
    }

}
